package com.upbos.upm.role;

import static com.upbos.core.ret.RetData.success;

import com.upbos.core.ret.RetData;
import com.upbos.sso.UserContext;
import com.upbos.upm.common.Constants;
import com.upbos.upm.login.LoginService;
import com.upbos.upm.module.ModuleService;
import com.upbos.upm.entity.Role;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * <b>Application name：</b> RoleController.java <br>
 * <b>Application describing: 角色管理接口</b> <br>
 * <b>Copyright：</b> Copyright &copy; 2015-2020 yideb.com 版权所有<br>
 * <b>Company：</b> yideb.com <br>
 * <b>Date：</b> 2019年08月17日 17:09 <br>
 * <b>author：</b> <a href="mailto:wangjz@miyzh.com"> Jason </a>
 * <b>version：</b> V5.0.0
 */
@RestController
@RequestMapping("upm/role")
public class RoleController {

    @Resource
    private RoleService roleService;

    @Resource
    private LoginService loginService;

    @Resource
    private ModuleService moduleService;
    /**
     * 获取角色列表
     *
     * @return 角色列表
     */
    @PostMapping("listRole")
    public RetData listRole(String orgId, String name, UserContext userContext) {
        if (!userContext.hasPrivilege(Constants.PRIVILEGE_ADMIN_KEY)) {
            orgId = userContext.getSsoUser().getOrgId();
        }

        return success(roleService.listRole(orgId, name));
    }

    /**
     * 保存角色
     *
     * @param role 角色
     */
    @PostMapping("saveRole")
    public void saveRole(Role role) {
        roleService.saveRole(role);
    }

    /**
     * 删除角色
     *
     * @param roleId 角色Id
     */
    @PostMapping("deleteRole")
    public void deleteRole(Integer roleId) {
        roleService.deleteRole(roleId);
    }

    /**
     * 保存角色对应的功能模块列表
     *
     * @param roleId     角色Id
     * @param moduleList 功能模块列表
     */
    @PostMapping("updateRoleModule")
    public void updateRoleModule(Integer roleId, String moduleList) {
        if (moduleList == null) {
            return;
        }
        String[] moduleArray = moduleList.split(",");
        roleService.updateRoleModule(roleId, moduleArray);
    }

    /**
     * 获取角色对应的功能模块列表
     *
     * @param roleId 角色Id
     * @return 角色对应的功能模块列表
     */
    @PostMapping("listRoleModule")
    public RetData listRoleModule(Integer roleId) {
        return success(roleService.listRoleModule(roleId));
    }

    /**
     * 获取功能模块树
     *
     * @return 功能模块树
     */
    @PostMapping("listModuleTree")
    public RetData listModuleTree(UserContext userContext) {
        if (userContext.hasPrivilege(Constants.PRIVILEGE_ADMIN_KEY)) {
            return success(moduleService.listMenuTree());
        }
        return  success(loginService.listUserModuleTree(userContext.getSsoUser().getUid()));
    }

    /**
     * 根据角色名称获取角色列表
     *
     * @param name 角色名称
     * @return 角色列表
     */
    @PostMapping("listRoleByName")
    public RetData listRoleByName(String name) {
        return success(roleService.listRoleByName(name));
    }
}